home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
games
/
ippon
/
source.lzh
/
enemy.h
< prev
next >
Wrap
C/C++ Source or Header
|
2000-07-07
|
4KB
|
140 lines
/* enemy.h */
#ifndef SHORT_LX
/* signed int の座標値から固定小数部(上位16bit)を取り出すマクロ */
#define SHORT_LX (*((short *) (&p->lx)))
#define SHORT_LY (*((short *) (&p->ly)))
#define SHORT_VX (*((short *) (&p->vx)))
#define SHORT_VY (*((short *) (&p->vy)))
#endif
typedef struct _enemy {
signed short x, y; /* 座標 */
short pt; /* スプライトパターンNo. */
short info; /* 反転コード・色・優先度を表わすデータ */
short type; /* 種類 */
signed int lx, ly; /* 32bit X,Y 座標 ( l = longword ) */
signed int vx, vy; /* 速度 */
signed short hit_sx, hit_sy; /* 自機ショットに対する当たり判定の大きさ */
signed short hp; /* 耐久力( <= 0 で破壊) */
signed short damage; /* 今回受けたダメージ */
char damage_mode; /* 貫通するかしないか */
char flash; /* 残り hp が少なくてフラッシュするカウンター */
unsigned char angle; /* 角度 (0~255) */
short shot_count; /* (当たったショット)が刺さった回数 */
int timer; /* タイマー */
short (*func_enemy_move) (struct _enemy *); /* 移動関数へのポインタ */
void (*func_enemy_free) (struct _enemy *); /* 終了関数へのポインタ */
short m_work; /* 移動用ワーク */
short m_work2;
short m_work3;
short m_work4;
short m_work5;
short m_work6;
short s_work; /* ショット用ワーク */
short s_work2;
short s_work3;
short s_work4;
unsigned char s_angle; /* ショットの角度 (0~255) */
unsigned char s_angle2;
unsigned char s_angle3;
unsigned char s_angle4;
/* 移動用ワーク(SubMoveTo() 用) */
signed int move_ax, move_ay; /* 加速度 */
unsigned short move_seq; /* 加速中、等速度運動中、減速中 */
signed short move_count; /* 加速度を何回足すか */
signed short move_count2; /* 一定速度で進む回数 */
signed short move_count3; /* 実際に加速した回数 */
signed short move_counter; /* 何回足すか数える */
/* コア関係のワーク */
signed short core_x, core_y; /* コア座標 */
short core_pt; /* スプライトパターンNo. */
short core_info; /* 反転コード・色・優先度を表わすデータ */
struct _shot *shot; /* 当たったショットのワーク */
struct _enemy *next; /* 次の構造体へのポインタ */
} ENEMY;
/* damage_mode の値 */
enum {
DAMAGE_THROUGH = 0, /* ショットは貫通する */
DAMAGE_PIERCE, /* ショットは刺さる */
};
/* 耐久力がこれ以下なら赤フラッシュ */
#define HP_PALET_RED 10
/* 敵キャラ点滅(ダメージを受けた、体力が少ない)時のタイマー用定数 */
#define TIMER_FLASH_RED 10 /* タイマーがこれ以上なら赤フラッシュ */
#define TIMER_FLASH_DAMAGE 14 /* ダメージを受けたらタイマーをこの値に */
#define TIMER_FLASH_NORMAL 15 /* これを越えたらタイマーを0に */
enum {
ENEMY_ZAKOA = 0,
ENEMY_ZAKOB,
ENEMY_COVERN,
ENEMY_OPLASER,
ENEMY_ROUND4,
ENEMY_COVERF,
ENEMY_SWORD,
ENEMY_SEARCHZ,
ENEMY_SEARCHZ2,
ENEMY_ZAKO031,
ENEMY_LBOSS01,
ENEMY_LBOSS01C,
};
#ifdef GLOBAL_DEFINE /* グローバル変数の定義と宣言を1つにまとめるテク */
#define Extern /* Extern をヌル文字列に置換 */
#else
#define Extern extern /* Extern を extern に置換 */
#endif
/* グローバル変数 */
Extern short obj_zako02, obj_covern, obj_oplaser, obj_round4, obj_coverf, obj_sword, obj_searchz,
obj_zako03, obj_lboss01;
#ifdef DEBUG
Extern short enemy_sum; /* 敵の数 */
#endif
/* 関数プロトタイプ宣言 */
void EnemyInit (void);
ENEMY *EnemyAlloc (short, signed short, signed short);
void EnemyMove (void);
/* サービスルーチン */
void SubEnemyMoveToInit (ENEMY *, signed short, signed short,
unsigned char, signed short);
short SubEnemyMoveTo (ENEMY *);
short SubEnemyMoveToAbort (ENEMY *);
/* 関数プロトタイプ宣言(FuneEnemy/ 以下) */
void EnemyAllocZakoA (ENEMY *);
void EnemyAllocZakoB (ENEMY *);
void EnemyAllocCoverN (ENEMY *);
void EnemyAllocOplaser (ENEMY *);
void EnemyAllocRound4 (ENEMY *);
void EnemyAllocCoverF (ENEMY *);
void EnemyAllocSword (ENEMY *);
void EnemyAllocSearchZ (ENEMY *);
void EnemyAllocSearchZ2 (ENEMY *);
void EnemyAllocZako031 (ENEMY *);
void EnemyAllocLBoss01 (ENEMY *);
void EnemyAllocLBoss01C (ENEMY *);